#ifndef _BINARY__HEAP_H__
#define _BINARY__HEAP_H__

#include <stdbool.h>

#define ELEMENTTYPE void *

/* 数据维护 */
typedef struct BinaryHeap
{
    ELEMENTTYPE * data;  /* 数据域 */
    int size;            /* 堆元素个数 */
    int capacity;        /* 容量 */


    /* 回调函数 */
    int (* compareFunc)(ELEMENTTYPE arg1, ELEMENTTYPE arg2);

}BinaryHeap;

/* 二叉堆的初始化 */
int binaryHeapInit(BinaryHeap * heap, int (* compareFunc)(ELEMENTTYPE arg1, ELEMENTTYPE arg2));

/* 二叉堆的新增 */
int binaryHeapInsert(BinaryHeap * heap, ELEMENTTYPE data);

/* 二叉堆的删除 */
int binaryHeapDelete(BinaryHeap * heap);

/* 二叉堆 堆顶元素 */
int binaryHeapTop(BinaryHeap * heap, ELEMENTTYPE * data);

/* 二叉堆的元素个数 */
int binaryHeapGetSize(BinaryHeap * heap, int * pSize);

/* 二叉堆是否为空 */
bool binaryHeapIsEmpty(BinaryHeap * heap);

/* 二叉堆的销毁 */
int binaryHeapDestroy(BinaryHeap * heap);


#endif //_BINARY__HEAP_H__